#ifndef __DLIST_H__
#define __DLIST_H__

// 引用头文件
#include "head.h"

// 数据对象 - 航班信息
typedef struct F_data
{
    int id;                     // 航班班次
    char flighttype[20];        // 飞机机型
    char startcity[20];         // 航班起点站
    char arrivecity[20];        // 航班终点站
    int starttime[2];           // 起飞时间 时:分
    int arrivetime[2];          // 到达时间 时:分
    char flytime[20];           // 飞行时间
    int value;                  // 票价
    int maxNUM;                 // 额定载客量
    int leftbuyersa;            // 剩余座位数量
    char whetherfly;            // 是否起飞 ‘y’ ‘n’
} F_data;

// 航班信息节点 - 双向循环链表
typedef struct F_node
{
    F_data data;
    struct F_node *prev;
    struct F_node *next;
} F_node;

// 航班信息头结点
typedef struct F_list
{
    F_node *next;
} F_list;

// 函数声明

// 向文件写入航班信息
void D_List_file_print(F_list *list);

// 从文件读取航班信息
void D_List_file_scanf(F_list *list);

// 双向链表的创建
F_list* D_List_init();

// 双向链表的插入
void D_List_insert(F_list *list, F_data data, int pos);

// 双向链表的删除
void D_List_delete(F_list *list, int pos);

// 双向链表的查找
F_node *D_List_find_id(F_list *list, int id);
F_node *D_List_find_name(F_list *list, char *name);

// 双向链表的遍历
void D_List_print(F_list *list);

// 双向链表的判空
int D_List_is_empty(F_list *list);

// 双向链表的清空
void D_List_clear(F_list *list);

// 双向链表的合并
F_list* D_List_merge(F_list *list1, F_list *list2);

// 双向链表的销毁
void D_List_free(F_list **list);



#endif // __DLIST_H__
